package controllers;
import java.util.Date;
import java.util.logging.Logger;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Query;


import models.BestOfBestOptions;
import models.BestOfRegionOptions;
import models.BestOfSiteOptions;
import models.COPSTemp;
import models.Location;
import models.Person;
import models.PostQuestion;
import models.RatingBest;
import models.RatingMPS;
import models.RatingNom;
import models.RatingRegion;
import models.ReplyQuestion;
import models.SolutionSubmission;
import models.SolutionAdoption;
import models.Recommend;
import models.Favourite;
import models.Area;
import models.Benefit;
import models.Customer;
import models.Site;
import models.SolutionSubscription;
import models.UserActions;

public class AppServletContextListener implements ServletContextListener{
	 
	private static final Logger log = Logger.getLogger(AppServletContextListener.class.getName());
	
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {

	}
 
	@Override
	public void contextInitialized(ServletContextEvent arg0) {		
		ObjectifyService.register(SolutionSubmission.class);
		ObjectifyService.register(SolutionAdoption.class);
		ObjectifyService.register(RatingNom.class);
		ObjectifyService.register(RatingMPS.class);
		ObjectifyService.register(RatingRegion.class);
		ObjectifyService.register(RatingBest.class);
		ObjectifyService.register(Recommend.class);
		ObjectifyService.register(Favourite.class);
		ObjectifyService.register(Area.class);
		ObjectifyService.register(Benefit.class);
		ObjectifyService.register(Customer.class);
		ObjectifyService.register(Site.class);
		ObjectifyService.register(SolutionSubscription.class);
		ObjectifyService.register(UserActions.class);
		ObjectifyService.register(PostQuestion.class);
		ObjectifyService.register(ReplyQuestion.class);
		ObjectifyService.register(Location.class);
		ObjectifyService.register(COPSTemp.class);
		ObjectifyService.register(Location.class);
		ObjectifyService.register(Person.class);
		
		ObjectifyService.register(BestOfBestOptions.class);
		ObjectifyService.register(BestOfRegionOptions.class);
		ObjectifyService.register(BestOfSiteOptions.class);		
		
		//insertLocation(); Remark by Kulprapas
		log.info("Loaded SolutionSubmission, SolutionAdoption, Rating and Recommend Class in the Objectify");
	}
	



	
	private void SaveDataToLocation(Location _items,Date _today, String _email)
	{
		int RegionID  = 0;
		String RGname = _items.getLocationRegionName().toString();
        if (RGname.equals("Americas")){
        	RegionID  = 1;
        }
        else if(RGname.equals("China")){
        	RegionID  = 2;
        }
        else if(RGname.equals("Europe")){
        	RegionID  = 5;
        }
        else if(RGname.equals("Pacific Rim")){
        	RegionID  = 4;
        }
        else if(RGname.equals("South-East Asia")){
        	RegionID  = 3;
        }
			
        
		Objectify ofy = ObjectifyService.begin();
		Query<Location> q = ofy.query(Location.class).filter("LocationName", _items.getLocationName());
   		for ( Location f : q.fetch() ) {	    			
    			ofy.delete(f);
   		}
   		
		Location  items  = new Location();
		items.setLocationName(_items.getLocationName());
		items.setLocationRegionName(_items.getLocationRegionName());
		items.setLocationRegionID(RegionID);
		items.setSubmittedBY(_email);
		items.setSubmittedON(_today);
		Objectify ofy1 = ObjectifyService.begin();
		ofy1.put(items);
	}
	
	private void insertLocation()
	{
		//UserService userService = UserServiceFactory.getUserService();
		//User user = userService.getCurrentUser();
		String user_email = "webmaster@celestica.com";
		Date today = new java.util.Date();
		Location  items  = new Location();
		
		
		String RgAmericas ="Americas";
		String RgChaina ="China";
		String RgEurope ="Europe";
		String RgPacific ="Pacific Rim";
		String RgSouth ="South-East Asia";
		

		items = new Location();
		items.setLocationName("Suzhou");
		items.setLocationRegionName(RgChaina);
		SaveDataToLocation(items,today,user_email);
		
		
		items = new Location();
		items.setLocationName("Remote-Asia");
		items.setLocationRegionName(RgSouth);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Valencia");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);
		
	
		items = new Location();
		items.setLocationName("Dallas");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Singapore");
		items.setLocationRegionName(RgSouth);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Remote-Europe");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Johor Bahru(AMS)");
		items.setLocationRegionName(RgSouth);
		SaveDataToLocation(items,today,user_email);
		
		
		items = new Location();
		items.setLocationName("Kulim");
		items.setLocationRegionName(RgSouth);
		SaveDataToLocation(items,today,user_email);
		
		
		items = new Location();
		items.setLocationName("Hong Kong");
		items.setLocationRegionName(RgSouth);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Song Shan Lake");
		items.setLocationRegionName(RgChaina);
		SaveDataToLocation(items,today,user_email);
		

		items = new Location();
		items.setLocationName("Manchester");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Reynosa");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Austin");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Monterrey");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		

		items = new Location();
		items.setLocationName("Ottawa");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		


		items = new Location();
		items.setLocationName("San Jose");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);


		items = new Location();
		items.setLocationName("Toronto");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Arden Hills");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Remote-Americas");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Fontana");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Nashville");
		items.setLocationRegionName(RgAmericas);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Zurich");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Oradea");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Galway");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Rajecko");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Gourock");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Austria");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);
		
		items = new Location();
		items.setLocationName("Dublin");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Kladno");
		items.setLocationRegionName(RgEurope);
		SaveDataToLocation(items,today,user_email);


		
		items = new Location();
		items.setLocationName("Dongguan");
		items.setLocationRegionName(RgChaina);
		SaveDataToLocation(items,today,user_email);


		items = new Location();
		items.setLocationName("Shanghai");
		items.setLocationRegionName(RgChaina);
		SaveDataToLocation(items,today,user_email);
		

		items = new Location();
		items.setLocationName("Johor Bahru");
		items.setLocationRegionName(RgSouth);
		SaveDataToLocation(items,today,user_email);
		

		items = new Location();
		items.setLocationName("Singapore(AMS)");
		items.setLocationRegionName(RgSouth);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Laem Chabang");
		items.setLocationRegionName(RgPacific);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Kawasaki");
		items.setLocationRegionName(RgPacific);
		SaveDataToLocation(items,today,user_email);

		items = new Location();
		items.setLocationName("Miyagi");
		items.setLocationRegionName(RgPacific);
		SaveDataToLocation(items,today,user_email);

	}
}